home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / LINUX / MATH_EMU.ZIP / MATH_EMU / ENTRY.S < prev    next >
Encoding:
Text File  |  1979-12-31  |  1.9 KB  |  103 lines

  1.  
  2. #include "linkage.h"
  3. LOFF_D0     = 0x00
  4. LOFF_D1     = 0x04
  5. LOFF_D2     = 0x08
  6. LOFF_D3     = 0x0C
  7. LOFF_D4     = 0x10
  8. LOFF_D5     = 0x14
  9. LOFF_D6     = 0x18
  10. LOFF_D7     = 0x1C
  11. LOFF_A0     = 0x20
  12. LOFF_A1     = 0x24
  13. LOFF_A2     = 0x28
  14. LOFF_A3     = 0x2C
  15. LOFF_A4     = 0x30
  16. LOFF_A5     = 0x34
  17. LOFF_A6        = 0x38   
  18. LOFF_USP    = 0x3C
  19. LOFF_PAD    = 0x40
  20. LOFF_STKADJ    = 0x42
  21. LOFF_SR     = 0x44
  22. LOFF_PC     = 0x46
  23. LOFF_FORMAT    = 0x4A
  24. LOFF_STACK    = 0x4C
  25.  
  26.  
  27.  
  28.        .text
  29.     .globl SYMBOL_NAME(fpu_emu_trap),SYMBOL_NAME(copyin),SYMBOL_NAME(copyout)
  30.     
  31.  
  32. ENTRY(fpu_emu_trap)
  33.     clrl    %sp@-    
  34.     clrl    %sp@-
  35.     moveml    %d0-%a6,%sp@-
  36.     movel    %usp,%a0
  37.     btst     #5,%sp@(LOFF_SR)
  38.     beqs    inuser
  39.     leal    %sp@(LOFF_STACK),%a0    
  40. inuser:
  41.     movel    %a0,%sp@(LOFF_USP)                
  42.     movel    %sp,%sp@-
  43.     jbsr    SYMBOL_NAME(do_fpu_emulate)
  44.     addql    #4,%sp
  45.     movel    %sp@(LOFF_USP),%a0
  46.     
  47.     movel    %a0,%usp
  48. exitint:
  49.     moveml    %sp@+,%d0-%a6     
  50.     addql    #8,%sp                 
  51.     rte
  52.  
  53. ENTRY(fusword)
  54.              movem.l    %a0-%a1,%sp@-
  55.     movel     12(%sp),%a0
  56.     movel    SYMBOL_NAME(globlframe),%a1
  57.     movew    %a1@(LOFF_SR),%d0
  58.     andl    #0x2000,%d0
  59.     bnes    superread
  60.  
  61.     movel    #1,%d0
  62.     movec    %d0,%SFC
  63.     movesw    (%a0),d0
  64.     bras    fusexit    
  65. superread:    
  66.               movew    (%a0),d0
  67. fusexit:
  68.               movem.l    %sp@+,%a0-%a1
  69.               rts
  70.               
  71.  
  72. ENTRY(copyout)
  73.              movem.l     %d0-%d1/%a0-%a1,%sp@-
  74.     movel    20(%sp),%a0    | source
  75.     movel    24(%sp),%a1    | destination
  76.     movel    28(%sp),%d0    | count
  77.     subl    #1,%d0        | dec count by 1 for dbra
  78.     movel    #1,%d1
  79.     movec    %d1,%DFC        | set dfc for user data space
  80. moreout:
  81.     moveb    (%a0)+,%d1    | fetch supervisor byte
  82.     movesb    %d1,(%a1)+    | write user byte
  83.     dbf    %d0,moreout
  84.     movem.l     %sp@+,%d0-%d1/%a0-%a1
  85.     rts
  86.  
  87. ENTRY(copyin)
  88.     movem.l     %d0-%d1/%a0-%a1,%sp@-
  89.     movel    20(%sp),%a0    | source
  90.     movel    24(%sp),%a1    | destination
  91.     movel    28(%sp),%d0    | count
  92.     subl    #1,%d0        | dec count by 1 for dbra
  93.     movel    #1,%d1
  94.     movec    %d1,%SFC        | set sfc for user space
  95. morein:
  96.     movesb    (%a0)+,%d1    | fetch user byte
  97.     moveb    %d1,(%a1)+    | write supervisor byte
  98.     dbf    %d0,morein
  99.     movem.l     %sp@+,%d0-%d1/%a0-%a1
  100.     rts
  101.  
  102.  
  103.